import java.util.ArrayList;
import java.util.Scanner;
import java.util.Arrays;
import java.util.*;
import java.util.HashMap;
import java.util.List;
/*给你一个大小为 n x n 的整数方阵 grid。返回一个经过如下调整的矩阵：
左下角三角形（包括中间对角线）的对角线按 非递增顺序 排序。
右上角三角形 的对角线按 非递减顺序 排序。*/
public class Main {
    public static int[][] change(int[][] grid) {
        int n = grid.length;
        Map<Integer, PriorityQueue<Integer>> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int t = i - j;
                map.putIfAbsent(t,new PriorityQueue<>
                        (t >= 0 ? Collections.reverseOrder() : Comparator.naturalOrder())); // 避免覆盖重复t；
                //降序                       //升序
                map.get(t).offer(grid[i][j]); // 根据t值添加元素
            }
        }
        int[][] res = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int t = i - j;
                res[i][j] = map.get(t).poll();
            }
        }
        return res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] grid = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                grid[i][j] = sc.nextInt();
            }
        }
        int[][] x = change(grid);
        System.out.println(Arrays.deepToString(x));
    }
}